import axios from 'axios'
const request_cache = {}
export default ({ cache = false, cacheKey = '', maxAge = Infinity, ...params }) => {
	// 失败时候是否展示错误信息
	// 本地缓存，只请求一次
	if (cache && request_cache[`${params.url}-${cacheKey}`]) {
		if (request_cache[`${params.url}-${cacheKey}`].then) {
			return request_cache[`${params.url}-${cacheKey}`]
		} else if (new Date().getTime() - request_cache[`${params.url}-${cacheKey}`].cacheTime < maxAge) {
			return new Promise((resolve) => {
				resolve(request_cache[`${params.url}-${cacheKey}`].res)
			})
		}
	} else if (request_cache[`${params.url}-${cacheKey}`]) {
		delete request_cache[`${params.url}-${cacheKey}`]
	}

	if (params.method && params.method.toLowerCase() === 'post') {
		// post时传入参数是data字段
		params.data = params.data || params.params || undefined
		// params.data = qs.stringify(params.data); // 和后端约定 post请求用json的方式传递数据，所以关掉
		params.params = undefined
		params.headers = params.headers || {
			'Content-Type': 'application/json;charset=UTF-8' // 和后端约定 post请求用json的方式传递数据
		}
	} else if (!params.method || (params.method && params.method.toLowerCase() === 'get')) {
		// get时传入的参数是params字段
		params.params = params.params || params.data || undefined
	}

	const servicePromise = new Promise((resolve, reject) => {
		axios(params)
			.then(({ data: res }) => {
				resolve(res)
			})
			.catch((e) => {
				// 接口非200 || 接口非304
				reject(e)
			})
	})
	//缓存这里需要考虑一种情况是，在第二次请求发出时，第一次请求还未完成
	//那么可以先把第一次请求操作缓存，第二次请求时判断若还在pending中，则返回promise对象，否则返回结果
	if (cache) {
		request_cache[`${params.url}-${cacheKey}`] = servicePromise
	}

	return servicePromise
}
